#ifndef CAMDATA_H_
#define CAMDATA_H_

#include "../../../../nemosomen/DataModel/src/nemosomenBase.h"

class CamData : public Model {
public:
	
	Prop<int> *index;
	Prop<std::string> *ip;
	Prop<std::string> *dir;
	Prop<int> *proxy;
	Prop<std::string> *proxyIp;
	Prop<std::string> *proxyDir;
	Prop<int> *enabled;
	~CamData() {}
	CamData(AbstractPool *_pool, std::string _name):Model(_pool,_name,"CamData"){
		index = new Prop<int>(INT,"index",this);
		ip = new Prop<std::string>(TEXT,"ip",this);
		dir = new Prop<std::string>(TEXT,"dir",this);
		proxy = new Prop<int>(INT,"proxy",this);
		proxyIp = new Prop<std::string>(TEXT,"proxyIp",this);
		proxyDir = new Prop<std::string>(TEXT,"proxyDir",this);
		enabled = new Prop<int>(INT,"enabled",this);
	}
	CamData(AbstractPool *_pool, std::string _name,std::string _className):Model(_pool,_name,_className){
			index = new Prop<int>(INT,"index",this);
			ip = new Prop<std::string>(TEXT,"ip",this);
			dir = new Prop<std::string>(TEXT,"dir",this);
			proxy = new Prop<int>(INT,"proxy",this);
			proxyIp = new Prop<std::string>(TEXT,"proxyIp",this);
			proxyDir = new Prop<std::string>(TEXT,"proxyDir",this);
			enabled = new Prop<int>(INT,"enabled",this);
		}
};

class CamList : public Model {
public:
	NProp<CamData*> *cams;
	~CamList() {}
	CamList(AbstractPool *_pool, std::string _name):Model(_pool,_name,"CamList"){
		cams = new NProp<CamData*>(MODEL,"cams",this);
	}
	CamList(AbstractPool *_pool, std::string _name,std::string _className):Model(_pool,_name,_className){
			cams = new NProp<CamData*>(MODEL,"cams",this);
	}
};

class MovieData : public Model {
public:
	Prop<std::string> *name;
	Prop<std::string> *filename;
	Prop<int> *start;
	Prop<int> *stop;
	Prop<int> *id;
	MovieData(AbstractPool *_pool, std::string _name):Model(_pool,_name,"MovieData") {
		name = new Prop<std::string>(TEXT,"name",this);
		filename = new Prop<std::string>(TEXT,"filename",this);
		start = new Prop<int>(INT,"start",this);
		stop = new Prop<int>(INT,"stop",this);
		id = new Prop<int>(INT,"id",this);
	}
	MovieData(AbstractPool *_pool, std::string _name,std::string _className):Model(_pool,_name,_className) {
			name = new Prop<std::string>(TEXT,"name",this);
			filename = new Prop<std::string>(TEXT,"filename",this);
			start = new Prop<int>(INT,"start",this);
			stop = new Prop<int>(INT,"stop",this);
			id = new Prop<int>(INT,"id",this);
		}
};

class MovieList : public Model {
public:
	NProp<MovieData*> *movies;
		~MovieList() {}
		MovieList(AbstractPool *_pool, std::string _name):Model(_pool,_name,"MovieList"){
			movies = new NProp<MovieData*>(MODEL,"movies",this);
		}
		MovieList(AbstractPool *_pool, std::string _name,std::string _className):Model(_pool,_name,_className){
			movies = new NProp<MovieData*>(MODEL,"movies",this);
		}
};


class TextData : public Model {
public:
	Prop<std::string> *text;
	TextData(AbstractPool *_pool, std::string _name):Model(_pool,_name,"TextData") {
		text = new Prop<std::string>(TEXT,"text",this);

	}
	TextData(AbstractPool *_pool, std::string _name,std::string _className):Model(_pool,_name,_className) {
		text = new Prop<std::string>(TEXT,"text",this);
		}
};

class TextList : public Model {
public:
	NProp<TextData*> *texts;
		~TextList() {}
		TextList(AbstractPool *_pool, std::string _name):Model(_pool,_name,"TextList"){
			texts = new NProp<TextData*>(MODEL,"texts",this);
		}
		TextList(AbstractPool *_pool, std::string _name,std::string _className):Model(_pool,_name,_className){
			texts = new NProp<TextData*>(MODEL,"texts",this);
		}
};

class CamDataImport {
public:
	static void importModels(DataPool *_pool) {
		_pool->registerModelCreator("CamData",&(createModel<CamData>));
		_pool->registerModelCreator("CamList",&(createModel<CamList>));
		_pool->registerModelCreator("MovieData",&(createModel<MovieData>));
		_pool->registerModelCreator("MovieList",&(createModel<MovieList>));
		_pool->registerModelCreator("TextData",&(createModel<TextData>));
		_pool->registerModelCreator("TextList",&(createModel<TextList>));
	}
};

#endif /*CAMDATA_H_*/
